﻿using System;
using System.Collections.Generic;
using System.Text;
using T.FAS.Runtime.Metadata.Entity;

namespace T.FAS.Runtime.Metadata.SPI
{
    /// <summary>
    /// 客户端元数据服务接口
    /// </summary>
    public interface IMetaDataClientService
    {
        /// <summary>
        /// 获取元数据(缓存模式)
        /// </summary>
        /// <param name="metaDataId">元数据ID</param>
        /// <returns>元数据</returns>
        IMetaData GetMetaData(string metaDataId);
        /// <summary>
        /// 获取元数据(缓存模式)
        /// </summary>
        /// <param name="metaDataCode">元数据编号</param>
        /// <param name="metaTypeID">元数据类型</param>
        /// <returns></returns>
        IMetaData GetMetaDataByCode(string metaDataId, string metaTypeId);

        /// <summary>
        /// 查看获取具体的元数据(缓存模式)
        /// </summary>
        /// <param name="metaDataId">元数据ID</param>
        /// <returns>元数据</returns>
        IMetaDataContent GetMetaDataContent(string metaDataId);

        /// <summary>
        /// 获取实际的元数据(缓存模式)
        /// </summary>
        /// <typeparam name="T">元数据类型</typeparam>
        /// <param name="metaDataId">元数据ID</param>
        /// <returns>元数据</returns>
        T GetMetaData<T>(string metaDataId) where T : class, IMetaDataContent;

        /// <summary>
        /// 获取元数据(HSF服务模式)
        /// </summary>
        /// <param name="metaDataId">元数据ID</param>
        /// <returns>元数据</returns>
        IMetaData GetMetaDataFromHSF(string metaDataId);

        /// <summary>
        /// 查看获取具体的元数据(HSF服务模式)
        /// </summary>
        /// <param name="metaDataId">元数据ID</param>
        /// <returns>元数据</returns>
        IMetaDataContent GetMetaDataContentFromHSF(string metaDataId);

        /// <summary>
        /// 获取实际的元数据(HSF服务模式)
        /// </summary>
        /// <typeparam name="T">元数据类型</typeparam>
        /// <param name="metaDataId">元数据ID</param>
        /// <returns>元数据</returns>
        T GetMetaDataFromHSF<T>(string metaDataId) where T : class, IMetaDataContent;
    }
}
